#pragma once
#include <iostream>
#include <string>
#include <vector>
#include <memory>
#include <mutex>
#include <unordered_map>
#include <functional>
#include <mqcomm/Helper.hpp>
#include <mqcomm/Log.hpp>
#include <mqcomm/Message.pb.h>
using namespace std;

namespace rbmq {
    // 消费者对象结构体
    typedef function<void(const string& tag, const mqNs::BasicProperties* bp, const string& msg_body)> consumerCallback;
    struct consumer {
        typedef shared_ptr<consumer> ptr;
        consumer() {}
        consumer(const string& tag, const string& qname, bool auto_ack, const consumerCallback& callback) 
            :_tag(tag)
            ,_qname(qname)
            ,_auto_ack(auto_ack)
            ,_callback(callback)
        {

        }
        string _tag; // 消费者标识
        string _qname; // 消费者订阅的队列名称
        bool _auto_ack; // 消费者是否自动确认
        consumerCallback _callback; // 消费者处理消息的回调函数
    };
};